home *** CD-ROM | disk | FTP | other *** search
/ The Original Shareware 1.1 / The Original Shareware (WeMake CDs)(Volume 1.1)(CDs, Inc)(1993).iso / 6 / clmfeb85.zip / CASM.3 < prev    next >
Text File  |  1988-07-25  |  4KB  |  119 lines

  1.  
  2.                             Listing 3
  3.                     C to Assembler Interface
  4.  
  5.  
  6.  
  7. Interfacinτ ├ t∩ acces≤ architecturσ dependen⌠ capabilitie≤ ì
  8.  
  9. TITLE DISPIO - SUBROUTINE TO PERFORM DIRECT SCREEN I/O
  10. ;
  11. ;  #define MAX 8
  12. ;  char retvals [MAX] /* used by 3 functions */
  13. ;           /* (1) - read cursor position; retvals[0-1] = current cursor mode */
  14. ;           /*         retvals[3] = col, retvals[2] = row */
  15. ;           /* (2) - read light pen position  */
  16. ;           /*         retvals[0] = active(1)/inactive(0) */
  17. ;           /*         retvals[2-3] = pixel column, retvals[4]=raster line */
  18. ;           /*         retvals[6] = row, retvals[7] = col */
  19. ;           /* (3) - get state; retvals[0] = cols, retvals[1] = mode */
  20. ;           /*         retvals[2] = page */ 
  21. ;
  22. ;   setmode - dispio(mode) ;
  23. ;   set cursor type - dispio(set_curs_type,type) ;
  24. ;   set cursor position - dispio(set_cursor,page<<8,row<<8+col) ;
  25. ;   read cursor position - dispio(read_cursor_position,page<<8,retvals) ;
  26. ;   read light pen position - dispio(read_pen,retvals) ;
  27. ;   select active page - dispio(select_page+new_page_value) ;
  28. ;   scroll active page up - dispio(scroll_up+number_of_lines,page<<8,
  29. ;                                  lrow<<8+lcol, rrow<<8+rcol) ;
  30. ;   scroll active page down - dispio(scroll_down+number_of_lines,page<<8,
  31. ;                                    lrow<<8+lcol,rrow<<8+rcol) ;
  32. ;   get attribute character at current cursor pos - dispio(readac,page<<8) ;
  33. ;     returns attribute character as function value - high byte attribute,
  34. ;     low byte character
  35. ;   write attribute character at current cursor position - dispio(writeac+char,
  36. ;            page<<8+attribute, repeat count)
  37. ;   write character - dispio(write_char+character,page<<8,repeat count) ;
  38. ;   set color palette - dispio(set_pallette,pallette<<8+color_value) ;
  39. ;   write dot - dispio(write_dot+color,col,row) ;
  40. ;   read dot - dispio(read_dot,col,row)
  41. ;              dot read returned as low byte of function value
  42. ;   write teletype - dispio(write_teletype+char,(page<<8)+color) ;
  43. ;   get state - dispio(get_state,retval) 
  44. ;
  45. DGROUP  GROUP  DATA
  46. DATA    SEGMENT WORD PUBLIC 'DATA'
  47.         ASSUME  DS:DGROUP
  48. CASE_TABLE DW SETMODE,CURSTYPE,SETCURS,READCURS,READPEN,SETMODE
  49.            DW SCROLL,SCROLL,READAC,WRITEAC,WRITEAC,READAC,WRITEDOT
  50.            DW WRITEDOT,READAC,STATE
  51. ; case table uses 16 words
  52. RLAYOUT  STRUC        ; Return address space layout
  53. RAX     DW    ?       
  54. RBX     DW    ?
  55. RCX     DW    ?
  56. RDX     DW    ?
  57. RLAYOUT ENDSèDATA    ENDS
  58. ;
  59. PGROUP  GROUP  PROG
  60. PROG    SEGMENT  BYTE  PUBLIC 'PROG'
  61.         ASSUME   CS:PGROUP
  62.         PUBLIC   DISPIO
  63. ;
  64. DISPIO  PROC    NEAR
  65.         POP     SI
  66.         POP     AX
  67.         MOV     BL,AH
  68.         XOR     BH,BH
  69.         CMP     BL,15             ; INVALID FUNCTION CODE ?
  70.         JA      ERROR
  71.         SHL     BX,1
  72.         JMP     CASE_TABLE[BX]
  73. ;
  74. ERROR:  MOV     AX,-1
  75.         JMP     SI
  76. ;
  77. SETCURS:   POP    BX
  78.            POP    DX
  79. SETMODE:   INT    10H
  80.            JMP    SI
  81. ;
  82. READCURS:  POP    BX
  83.            INT    10H
  84.            POP    DI
  85.            MOV    [DI].RAX,CX
  86.            MOV    [DI].RBX,DX
  87.            JMP    SI
  88. ;
  89. SCROLL:    POP    BX
  90. WRITEDOT:  POP    CX
  91.            POP    DX
  92.            INT    10H
  93.            JMP    SI
  94. ;
  95. READAC:    POP    BX
  96.            INT    10H
  97.            JMP    SI
  98. ;
  99. WRITEAC:   POP    BX
  100. CURSTYPE:  POP    CX
  101.            INT    10H
  102.            JMP    SI
  103. ;
  104. STATE:     INT    10H
  105.            POP    DI
  106.            MOV    [DI].RAX,AX
  107.            MOV    [DI].RBX,BX
  108.            JMP    SI
  109. ;
  110. READPEN:   INT    10H
  111.            POP    DIè           MOV    [DI].RAX,AX
  112.            MOV    [DI].RBX,BX
  113.            MOV    [DI].RCX,CX
  114.            MOV    [DI].RDX,DX
  115.            JMP    SI
  116. DISPIO  ENDP
  117. PROG    ENDS
  118.         END
  119.